#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>

int main()
{
    pid_t id = fork();
    if(id<0)
    {
        perror("fork:");
        exit(1);
    }
    else if(id == 0)
    {
        int cnt = 5;
        while(cnt)
        {
            printf("cnt:%d, 我是子进程，pid:%d,ppid:%d\n",cnt,getpid(),getppid());
            cnt--;
            sleep(1);
        }
        exit(15);
    }
    else 
    {  
        int quit = 0;
        while(!quit)
        {
            int status = 0;
            pid_t res = waitpid(-1,&status,WNOHANG);

            if(res>0)
            {
                printf("等待子进程成功，退出码：%d\n",WEXITSTATUS(status));
                quit = 1;
            }
            else if(res == 0)
            {
                printf("子进程还在运行...\n");
                sleep(1);
            }
            else 
            {
                printf("等待失败\n");
                quit = 1;
            }
        }
     //    printf(" 我是父进程，pid:%d,ppid:%d\n",getpid(),getppid());
     //   // sleep(7);
     //    int status = 0;
     //    
     //    //pid_t ret = wait(NULL);
     //    pid_t ret = waitpid(id,&status,0);
     //    if(ret>0)
     //    {
     //        if(WIFEXITED(status))
     //        {
     //          // printf("等待子进程成功，ret:%d,子进程收到的信号信号：%d,子进程退出码：%d\n",ret,status & 0x7F,(status>>8)&0xFF);
     //          printf("子进程执行完毕，退出码为：%d\n",WEXITSTATUS(status));
     //        }
     //        else 
     //        {
     //            printf("子进程异常退出：%d\n",WIFEXITED(status));
     //        }
     //    }
        // while(1)
        // {
        //     printf("i am parent process,pid:%d,ppid:%d\n",getpid(),getppid());
        //     sleep(1);
        //  }
    }
    return 0;
}
